﻿Public Class frmAnaliza

    Private mvarZlecenie As clsTrSzukanie
    Private mvarPozycjaZlecenia As clsInhTrPozycjaZlecenia
    Private mvarDbHolder As clsDataBase
    Private mvarUzytkownik As clsUzytkownik
    Private mvarWyznUruchomienia As Boolean
    Private mvarDrut As clsInhTrDrut
    Private mvarPozycjaSchematu As clsInhTrPozycjeSchematu
    Private mvarMaterialProdukcyjny As clsInhTrMaterialProdukcyjny
    Private mvarWysylanyDrut As clsTrStatystyki
    Private mvarWyznNieLicz As Boolean
    Private mvarLicznikOperacji As Integer
    Private mvarTabDrut As DataTable


    Public Sub New()

        ' To wywołanie jest wymagane przez projektanta.
        InitializeComponent()

        ' Dodaj inicjację po wywołaniu funkcji InitializeComponent().
        mvarDbHolder = New clsDataBase(VAR_CONNECTION_PARAMETERS, VAR_ERROR_HANDLER)

        mvarUzytkownik = clsUzytkownik.Instance()
        mvarTabDrut = New DataTable
        UzupelnijPracownikow()

    End Sub

    Private Sub UzupelnijPracownikow()

        Dim lvarDataTable As New DataTable
        Dim lvarPracownik As New clsPracownik
        Dim lvarI As Integer

        lvarDataTable = clsPracownik.PobierzWszystkichPracownikow(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                'If lvarRow("aktywny") Then
                lvarI = lvarI + 1
                lvarPracownik = New clsPracownik(lvarRow("id").ToString(), CStr(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("imie")), String.Empty, lvarRow("imie"))), CStr(IIf(IsDBNull(lvarRow("nazwisko")), String.Empty, lvarRow("nazwisko"))), CStr(IIf(IsDBNull(lvarRow("login")), String.Empty, lvarRow("login"))), CStr(IIf(IsDBNull(lvarRow("haslo")), String.Empty, lvarRow("haslo"))), CBool(IIf(IsDBNull(lvarRow("aktywny")), String.Empty, lvarRow("aktywny"))))
                dgvPrac.Rows.Add(lvarI, lvarPracownik.Nazwisko, 0, 0)
                dgvPrac.Rows(dgvPrac.Rows.Count - 1).Tag = lvarPracownik
                'End If
            Next
        End If

        'utowrzenie tabeli mvarTabDrut, w ktorej beda sie znajdowac numery drutu rodzic
        mvarTabDrut.Columns.Add("id_drutu", GetType(Integer))
        mvarTabDrut.Columns.Add("waga", GetType(Double))
    End Sub


    Private Sub Szukaj()
        Try
            Dim lvarCommand As String
            Dim lvarI As Integer
            Dim lvarSuma As Double
            Dim lvarWaga As Double

            If dtpOkresOd.Value.Date > dtpOkresDo.Value.Date Then
                MessageBox.Show("Wybierz poprawnie kryterium wyszukiwania", "WIREMET")
            Else
                If dtpOkresOd.Checked Or dtpOkresDo.Checked Or chbOkres.Checked Then
                    lvarCommand = " AND wysylka.data_wysylki :: date between '" & dtpOkresOd.Value.Date & "' AND '" & dtpOkresDo.Value.Date & "'"
                End If
            End If


            mvarWysylanyDrut = New clsTrStatystyki
            mvarWysylanyDrut.WyslanyDrut(mvarDbHolder, lvarCommand)

            dgvWyslanyDrut.Rows.Clear()
            If mvarWysylanyDrut.DrutWyslany.Count = 0 Then
                MessageBox.Show("nie ma.", "WIREMET")
            Else
                For Each lvarDrut As clsInhTrDrut In mvarWysylanyDrut.DrutWyslany

                    lvarI += 1
                    For Each lvarRodzic As clsTrRodzic In lvarDrut.Rodzic
                        lvarWaga = lvarWaga + CDbl(lvarRodzic.Waga)
                    Next
                    dgvWyslanyDrut.Rows.Add(lvarI, lvarDrut.Id, lvarWaga)
                    dgvWyslanyDrut.Rows(dgvWyslanyDrut.Rows.Count - 1).Tag = lvarDrut
                    lvarSuma = lvarSuma + lvarWaga
                    ObliczPracePracownikow(lvarDrut, lvarWaga)
                    lvarWaga = 0


                Next
            End If

            txtIloscKg.Text = lvarSuma.ToString()
            lvarSuma = 0
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub


    Private Sub ObliczPracePracownikow(Drut As clsInhTrDrut, Waga As Double)

        Dim lvarDrut As clsInhTrDrut
        Dim lvarNewRow As DataRow
        Dim lvarWaga As Double

        lvarDrut = Drut
        ObliczDrut(lvarDrut, Waga)

        'Sprawdzenie ile dany drut ma drut_rodzic
        If lvarDrut.Rodzic.Count > 1 Then
            If Not lvarDrut.Rodzic.Item(0).WyznMaterialProdukcyjny Then
                For Each lvarRodzic As clsTrRodzic In lvarDrut.Rodzic
                    lvarNewRow = mvarTabDrut.NewRow()
                    With lvarNewRow
                        .Item("id_drutu") = lvarRodzic.DrutRodzicId
                        .Item("waga") = lvarRodzic.Waga
                    End With
                    mvarTabDrut.Rows.Add(lvarNewRow)
                Next
                dgvWyslanyDrut.Rows(dgvWyslanyDrut.Rows.Count - 1).DefaultCellStyle.BackColor = Color.Red

                lvarDrut = New clsInhTrDrut(CInt(mvarTabDrut.Rows(0).Item("id_drutu")), mvarDbHolder)
                lvarWaga = CDbl(mvarTabDrut.Rows(0).Item("waga"))
                mvarTabDrut.Rows.Remove(mvarTabDrut.Rows(0))
                ObliczPracePracownikow(lvarDrut, lvarWaga)
            Else
                If mvarTabDrut.Rows.Count > 0 Then
                    lvarDrut = New clsInhTrDrut(CInt(mvarTabDrut.Rows(0).Item("id_drutu")), mvarDbHolder)
                    lvarWaga = CDbl(mvarTabDrut.Rows(0).Item("waga"))
                    mvarTabDrut.Rows.Remove(mvarTabDrut.Rows(0))
                    ObliczPracePracownikow(lvarDrut, lvarWaga)
                End If
            End If
        Else
            If Not lvarDrut.Rodzic.Item(0).WyznMaterialProdukcyjny Then
                lvarWaga = CDbl(lvarDrut.Rodzic.Item(0).Waga)
                lvarDrut = New clsInhTrDrut(lvarDrut.Rodzic.Item(0).DrutRodzicId, mvarDbHolder)
                ObliczPracePracownikow(lvarDrut, lvarWaga)
            Else
                If mvarTabDrut.Rows.Count > 0 Then
                    lvarDrut = New clsInhTrDrut(CInt(mvarTabDrut.Rows(0).Item("id_drutu")), mvarDbHolder)
                    lvarWaga = CDbl(mvarTabDrut.Rows(0).Item("waga"))
                    mvarTabDrut.Rows.Remove(mvarTabDrut.Rows(0))
                    ObliczPracePracownikow(lvarDrut, lvarWaga)
                Else
                    mvarTabDrut.Rows.Clear()
                End If
            End If

        End If

    End Sub

    Private Sub ObliczDrut(Drut As clsInhTrDrut, Waga As Double)

        Dim lvarDrut As clsInhTrDrut
        Dim lvarObliczenie As Double

        lvarDrut = Drut

        If lvarDrut.PozycjeSchematu.WymiarKoncowy <> String.Empty And lvarDrut.PozycjeSchematu.WymiarKoncowy <> "null" Then

            lvarObliczenie = Oblicz(CDbl(lvarDrut.PozycjeSchematu.WymiarKoncowy))
            For lvarIndex_2 As Integer = 0 To dgvPrac.Rows.Count - 1
                If CInt(CType(dgvPrac.Rows(lvarIndex_2).Tag, clsPracownik).Id) = lvarDrut.PracownikId Then
                    dgvPrac.Rows(lvarIndex_2).Cells("colPracIlosc").Value = CDbl(dgvPrac.Rows(lvarIndex_2).Cells("colPracIlosc").Value) + CInt(lvarObliczenie * Waga)

                    dgvPrac.Rows(lvarIndex_2).Cells("colPracIloscKg").Value = CDbl(dgvPrac.Rows(lvarIndex_2).Cells("colPracIloscKg").Value) + CDbl(Waga)

                    txtIloscJedn.Text = CStr(CInt(txtIloscJedn.Text) + CInt(lvarObliczenie * Waga))
                    Exit For
                End If
            Next

        End If

    End Sub

    Private Function Oblicz(Srednica As Double) As Double

        Dim lvarReturn As Double

        If Srednica > 0 And Srednica < 2 Then
            lvarReturn = (Math.Pow(0.4 / Srednica, 2)) * 1000
        ElseIf Srednica > 0 And Srednica < 2 And Srednica < 5 Then
            lvarReturn = (Math.Pow(0.4 / 2, 2)) * 1000
        End If

        Return lvarReturn

    End Function


    Private Sub cmdSzukaj_Click(sender As Object, e As EventArgs) Handles cmdSzukaj.Click
        If dgvWyslanyDrut.Rows.Count > 0 Then
            dgvWyslanyDrut.Rows.Clear()
            For Each lvarRow As DataGridViewRow In dgvPrac.Rows
                lvarRow.Cells("colPracIlosc").Value = 0
            Next
        End If
        Szukaj()
    End Sub


    Private Sub frmAnaliza_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        mvarDbHolder.Close()
    End Sub


    Private Sub cmdExcel_Click(sender As Object, e As EventArgs) Handles cmdExcel.Click
        If dgvWyslanyDrut.Rows.Count > 0 Then
            UzupelnienieExcela()
        End If
    End Sub

    Private Sub UzupelnienieExcela()
  
        Dim lvarWiersz As Integer = 3
        Dim lvarColumn As Integer = 1

        Try
            Dim excelApp As New Microsoft.Office.Interop.Excel.Application
            Dim excelBook As Microsoft.Office.Interop.Excel.Workbook = excelApp.Workbooks.Open(VAR_PATH_EXCEL_NEW)
            Dim excelSheet As Microsoft.Office.Interop.Excel.Worksheet

            excelApp.Visible = False
            excelSheet = CType(excelBook.Sheets("Arkusz1"), Excel.Worksheet)

            Try
                With excelSheet
                    'Przepisanie do excela danych na temat wyslanego durtu
                    '
                    For Each lvarRow As DataGridViewRow In dgvWyslanyDrut.Rows
                        .Cells(lvarWiersz, lvarColumn).Value = lvarRow.Cells("colDrutId").Value
                        If lvarRow.DefaultCellStyle.BackColor = Color.Red Then
                            .Cells(lvarWiersz, lvarColumn).Interior.color = Color.Red
                        Else
                            .Cells(lvarWiersz, lvarColumn).Interior.color = RGB(221, 217, 195)
                        End If

                        lvarColumn = lvarColumn + 1
                        .Cells(lvarWiersz, lvarColumn).Value = lvarRow.Cells("colIlosc").Value
                        If lvarRow.DefaultCellStyle.BackColor = Color.Red Then
                            .Cells(lvarWiersz, lvarColumn).Interior.color = Color.Red
                        Else
                            .Cells(lvarWiersz, lvarColumn).Interior.color = RGB(197, 190, 151)
                        End If
                        lvarWiersz = lvarWiersz + 1
                        lvarColumn = lvarColumn - 1
                    Next
                    .Cells(lvarWiersz, lvarColumn).Value = "SUMA"
                    .Cells(lvarWiersz, lvarColumn).Interior.color = RGB(217, 151, 149)
                    lvarColumn = lvarColumn + 1
                    .Cells(lvarWiersz, lvarColumn).Value = txtIloscKg.Text
                    .Cells(lvarWiersz, lvarColumn).Interior.color = RGB(149, 55, 53)
                    lvarWiersz = lvarWiersz + 1
                    lvarColumn = lvarColumn - 1



                    lvarWiersz = 3
                    lvarColumn = 4
                    'Przepisanie do excela danych na temat przerobionego drutu przez pracownika
                    '
                    For Each lvarRow As DataGridViewRow In dgvPrac.Rows

                        .Cells(lvarWiersz, lvarColumn).Value = lvarRow.Cells("colPracPracownik").Value
                        .Cells(lvarWiersz, lvarColumn).Interior.color = RGB(197, 217, 241)
                        lvarColumn = lvarColumn + 1
                        .Cells(lvarWiersz, lvarColumn).Value = CDbl(lvarRow.Cells("colPracIlosc").Value)
                        .Cells(lvarWiersz, lvarColumn).Interior.color = RGB(141, 180, 227)
                        lvarWiersz = lvarWiersz + 1
                        lvarColumn = lvarColumn - 1
                    Next

                    .Cells(lvarWiersz, lvarColumn).Value = "SUMA"
                    .Cells(lvarWiersz, lvarColumn).Interior.color = RGB(217, 151, 149)
                    lvarColumn = lvarColumn + 1
                    .Cells(lvarWiersz, lvarColumn).Value = txtIloscJedn.Text
                    .Cells(lvarWiersz, lvarColumn).Interior.color = RGB(149, 55, 53)
                    lvarWiersz = lvarWiersz + 1
                    lvarColumn = lvarColumn - 1


                End With

                Dim lvarTmp As String

                With SaveFileDialog1
                    .InitialDirectory = VAR_PATH_EXCEL_SAVE
                    .FileName = "obliczenia_"
                    .DefaultExt = ".xls"
                    .Filter = "excel files (*.xls)|*.xls|All files (*.*)|*.*"
                    .OverwritePrompt = True
                    .ShowDialog()
                End With
                'If SaveFileDialog1.ShowDialog = DialogResult.OK Then
                '    Try
                '        lvarTmp = SaveFileDialog1.FileName
                '        excelBook.SaveAs(lvarTmp)
                '        excelBook.Close()
                '        excelApp.Quit()
                '    Catch ex As Exception
                '        MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
                '        excelBook.Saved = True
                '        excelBook.Close()
                '        excelApp.Quit()
                '    End Try
                'End If

            Catch ex As Exception
                MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
                excelBook.Saved = True
                excelBook.Close()
                excelApp.Quit()
            End Try

        Catch ex As Exception
            MsgBox(ex.Message) ' Info: Plik jest już otwarty
        End Try

    End Sub


    Private Sub dgvPrac_MouseClick(sender As Object, e As MouseEventArgs) Handles dgvPrac.MouseClick
        'uzupelnienie dgvDrutPracownika lista drutu zaznaczonego pracownika w dgvPrac, który w danym okresie został wysłany
        Dim lvarI As Integer = 0
        dgvDrutPracownika.Rows.Clear()
        txtIloscPracownikaKg.Text = "0"
        If dgvPrac.SelectedRows.Count > 0 Then
            If CInt(dgvPrac.SelectedRows(0).Cells("colPracIlosc").Value) <> 0 OrElse CInt(dgvPrac.SelectedRows(0).Cells("colPracIloscKg").Value) <> 0 Then
                For Each lvarRow As DataGridViewRow In dgvWyslanyDrut.Rows
                    If CType(lvarRow.Tag, clsInhTrDrut).PracownikId = CInt(CType(dgvPrac.SelectedRows(0).Tag, clsPracownik).Id) Then
                        lvarI = lvarI + 1
                        dgvDrutPracownika.Rows.Add(lvarI, lvarRow.Cells("colDrutId").Value, lvarRow.Cells("colIlosc").Value)
                        dgvDrutPracownika.Rows(dgvDrutPracownika.Rows.Count - 1).Tag = lvarRow
                        txtIloscPracownikaKg.Text = CStr(CDbl(txtIloscPracownikaKg.Text) + CDbl(lvarRow.Cells("colIlosc").Value))
                    End If
                Next
            End If
        End If
    End Sub




End Class